package com.cloud.adrian.novel.user.service;

import com.cloud.adrian.novel.common.req.PageReqDto;
import com.cloud.adrian.novel.common.resp.PageRespDto;
import com.cloud.adrian.novel.common.resp.RestResp;
import com.cloud.adrian.novel.user.dao.entity.UserInfo;
import com.cloud.adrian.novel.user.dto.req.UserLoginReqDto;
import com.cloud.adrian.novel.user.dto.req.UserRegisterReqDto;
import com.cloud.adrian.novel.user.dto.resp.UserCommentRespDto;
import com.cloud.adrian.novel.user.dto.resp.UserInfoRespDto;
import com.cloud.adrian.novel.user.dto.resp.UserLoginRespDto;
import com.cloud.adrian.novel.user.dto.resp.UserRegisterRespDto;

import java.util.List;

/**
 * 用户模块 服务类接口
 * @Author: xiangguiliang
 * @version: 1.0
 * @since: 2024/05/17
 */
public interface UserService {
    /**
     * 根据用户id列表查询用户信息列表
     * @param userIds 用户id列表
     * @return 用户信息列表
     */
    RestResp<List<UserInfoRespDto>> listUserInfoByIds(List<Long> userIds);

    /**
     * 用户注册
     * @param dto 注册参数
     * @return JWT
     */
    RestResp<UserRegisterRespDto> register(UserRegisterReqDto dto);

    /**
     * 用户登录
     * @param dto 登录参数
     * @return jwt + 昵称
     */
    RestResp<UserLoginRespDto> login(UserLoginReqDto dto);

    /**
     * 根据用户id查询用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    RestResp<UserInfoRespDto> getUserInfo(Long userId);

    /**
     * 根据用户id查询用户评论列表
     *
     * @param userId 用户id
     * @param dto    分页参数
     * @return 用户评论列表
     */
    RestResp<PageRespDto<UserCommentRespDto>> getUserComments(Long userId, PageReqDto dto);

    /**
     * 更新用户信息
     * @param dto 更新参数
     * @return void
     */
    RestResp<Void> updateUserInfo(UserInfo dto);
}
